/*
 * @Author: qianmingtian
 * @Date: 2020-07-06 09:14:01
 * @LastEditors: qianmingtian
 * @LastEditTime: 2020-07-06 10:04:14
 * @FilePath: \qianmingtian.github.io\code\java\ThisTest.java
 */

/**
 * 1. this 在实例方法中, 代表当前对象 2. this 不能在带有 static 的方法中使用
 */

public class ThisTest {
    int i;

    public static void doSome() {
        System.out.println("do some");
    }

    public void doOther() {
        System.out.println("do other");

    }

    // static 方法
    public static void method1() {
        // 调用dosome
        // 完整方式调用
        ThisTest.doSome();
        // 省略方式调用
        doSome();
        // 调用 doother
        // 完整方式调用
        ThisTest test = new ThisTest();
        test.doOther();
        // 省略方式调用
        // 没有
        // 访问 i
        // 完整
        System.out.println(test.i);

        // 不完整

    }

    public void method2() {
        // 调用dosome
        // 完整方式调用
        ThisTest.doSome();
        // 省略方式调用
        doSome(); // 不是当前对象的省略, dosome 方法属于全人类共有的方法,被加载在方法区内存,故可以直接调用 //实际执行的时候,与实例对象无关
        // 调用 doother
        // 完整方式调用
        this.doOther();

        // 省略方式调用
        doOther();

        // i
        // 完整
        System.out.println(this.i);
        // 不完整
        System.out.println(i);

    }

    public static void main(String[] args) {
        // method1
        // 完整
        ThisTest.method1();
        // 不完整
        method1();

        // method2
        // 完整
        ThisTest test = new ThisTest();
        test.method2();
        // 不完整

        test.method1();
        test = null;

        // 空指针异常 NullPointerException 出现的原因: 空引用访问实例对象相关数据,包括(实例对象,实例方法)
        test.method1(); // 这里不会出现空指针异常,所以与实例对象无关
        System.out.println(test.i);

    }
}
